#include "Jeu.h"

void jeuInit(Jeu *pJeu, const int nbr)
{
    int i;
    pJeu->nbrJ = nbr;  
    pJeu->plat = creerPlateau(36,pJeu->nbrJ);
    pJeu->jou = (Joueur*)malloc(pJeu->nbrJ*sizeof(Joueur));
    for(i=0;i<pJeu->nbrJ;i++)
    {
          initJoueur(&pJeu->jou[i]);
    }
    pJeu->pio = creerPioche();
	pJeu->bo = creerBonus();
    desInit(&pJeu->des);
}

Jeu * creerJeu(const int nbr)
{
    Jeu *unJeu = (Jeu *)malloc(sizeof(Jeu));
    jeuInit(unJeu,nbr);
    return unJeu;
}

Joueur * getJoueur(const Jeu * jeu, const int numJ)
{
	return &jeu->jou[numJ];
}

void jeuLibere(Jeu *pJeu)
{
    int i;
    detruitPlateau(&pJeu->plat);
    for(i=0;i<pJeu->nbrJ;i++)
    {
          libereJoueur(&pJeu->jou[i]);
    }
    free(pJeu->jou);
    detruirePioche(&pJeu->pio);
    detruitBonus(&pJeu->bo);
    desLibere(&pJeu->des);
}

int joueurUnTour(Jeu * jeu, const int i)
{
	int des;
	des = lancerDes(&jeu->des);
	set_position(&jeu->jou[i],get_position(&jeu->jou[i])+des);
	if(get_position(&jeu->jou[i]) > 34)
	{
		set_position(&jeu->jou[i],35);
	}
	return des;
}

int testFinJeu(const Jeu * jeu)
{
	int i;
	for(i=0;i<jeu->nbrJ;i++)
	{
		if(get_position(&jeu->jou[i]) > 34 && get_score(&jeu->jou[i]) > 4)
			return 0;
	}
	return 1;
}

void detruitJeu(Jeu **jeu)
{
    jeuLibere(*jeu);
    free(*jeu);
    *jeu = NULL;
}

void remplirJeu(Jeu * jeu, const int nbrJ)
{
	const char * adr = "./doc/Questions.txt";
	const char * ad2 = "./doc/Cartes.txt";
	const char * ad3 = "./doc/Bonus.txt";
	ListeTempQ * liste;
	ListeTempC * list2;
	FILE * fic = NULL;
	FILE * fi2 = NULL;
	
	jeuInit(jeu,nbrJ);
	repartirCase(jeu->plat);
	
	suppLigneVide(adr);
	suppLigneVide(ad2);
    	fic = fichierInit(adr);
	fi2 = fichierInit(ad2);

    	liste = creerListeTempQ();
	list2 = creerListeTC();

    	remplirQuestFichier(fic,liste);
	repartirQuest(jeu->plat,liste);

    	detruireListeTempQ(&liste);
    	fclose(fic);

	remplirCarteFichier(fi2,list2);
	/*La fonction remplirPioche détruit la listeTemp de Cartes lorqu'elle a fini sa distribution au plateau*/
    	remplirPiocheListeTC(list2,jeu->pio);

	fclose(fi2);

	remplirTabBonus(jeu->bo, ad3);
}

void testRegressionJeu()
{
    Jeu *J = creerJeu(2);
    printf("** Test régression : Jeu **\n");
    detruitJeu(&J);
    printf("** Test régression Jeu : Okay **\n\n");
}
